package com.learn;

import com.learn.Dao.Impl.UserDaoImpl;
import com.learn.bean.User;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author DJJ_F
 * @version 1.0
 * @date 2024/11/27
 * @description 第一章的测试类
 */
public class Demo01 {
    @Test
    public void BeanTest() {
        /*
        applicationContext 应用上下文，是一个接口，实际就是spring容器
        ClassPathXmlApplicationContext是他其中一个实现类，是从类路径下找spring配置文件的spring上下文对象
        FileSystemXmlApplicationContext是从系统文件中寻找spring配置文件
        下面的代码一启动，就会，启动spring容器，实例化所有bean并放在容器中
        需要写xml的路径, 可以写多个，里面的参数有可变长 String...，写错会报错
        创建好的对象放在了一个大的map中
        spring通过反射机制 Class.forName() 调用无参构造器，创建对象
        */
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        // 获取bean对象，beanid不存在就报错
        Object userServiceImpl = applicationContext.getBean("userServiceImpl");
        // 可以通过设置参数，来获取特定的类型
        UserDaoImpl userDaoImpl = applicationContext.getBean("userDaoImpl", UserDaoImpl.class);
        System.out.println(userDaoImpl);
        System.out.println(userServiceImpl);
    }

    @Test
    public void FactoryTest() {
        /*
        ApplicationContext实现了BeanFactory接口
        BeanFactory是springIoC的顶级接口
         */
        BeanFactory applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        User userBean = applicationContext.getBean("userBean", User.class);
        System.out.println(userBean);
    }

    @Test
    public void LoggerTest() {
        /*
        ApplicationContext实现了BeanFactory接口
        BeanFactory是springIoC的顶级接口
         */
        Logger logger = LoggerFactory.getLogger(Demo01.class);
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        User userBean = applicationContext.getBean("userBean", User.class);
        System.out.println(userBean);
        // trace 不会输出因为设置了logger级别没有怎么低
        logger.trace("trace msg");
        logger.debug("debug msg");
        logger.info("info msg");
        logger.error("error msg");
    }
}
